home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / clang / cslib15b.zip / INCLUDE / CSHEAP.H < prev    next >
C/C++ Source or Header  |  1994-12-20  |  2KB  |  82 lines

  1. /***********************************************************************
  2.  
  3.                                        CSA Library, Release 1.5.b 
  4.  
  5.        HEAP class, for allocating memory in chunks of
  6.        about 2 kB instead of allocating many small
  7.        blocks.
  8.  
  9.                                           Copyright(c) 1994 
  10.                                           Combis 
  11.                                           The Netherlands   
  12. ***********************************************************************/
  13.  
  14. #ifndef __CSHEAP_H
  15. #define __CSHEAP_H
  16.  
  17. #include "stdio.h"
  18. #include "cstools.h"
  19. #include "cstypes.h"
  20.  
  21. class HEAP
  22. {
  23.    U16 size;    // Chunck size
  24.    U16 nr;    // Number of allocations in a page.
  25.    U16 rs;    // Real chunk size;
  26.    U16 pasi;    // Page size;
  27.    U32 nrbl;    // Number of Blocks allocated.
  28.    U16 is_open;
  29.  
  30.    void *np;    // Next page
  31.    void *fp;    // Chain of full pages.
  32.  
  33.    typedef struct
  34.    {
  35.      void *n;    // next page
  36.      void *p;    // prev page
  37.      void *e;    // empty chain
  38.      U16  count;// number available
  39.    } pahe;    // Page HEader
  40.  
  41.  
  42. protected:
  43.    void connect(void *l,void *r);
  44.    void *new_page(void);
  45.    void unchain(void *&chain,void *p);
  46.    void head_chain(void *&chain,void *p);
  47.    void zap2(void );
  48.  
  49. public:
  50.  
  51.    ~HEAP(void) { if (is_open) close(); }
  52.    HEAP(void)  { is_open=FALSE; fp=np=NULL; nrbl=0; size=0; }
  53.  
  54. ////////////////////// Compatibility functions //////////////////////////
  55.    void vfree(void *p) { free(p); }
  56.    void *vmalloc(void) { return malloc(); }
  57.  
  58.  
  59. ////////////////////// Init/Creation ////////////////////////////////////
  60.    void init(U16 s,U16 page_size=2048);
  61.  
  62. ////////////////////// Open/Close ///////////////////////////////////////
  63.    void close(void);
  64.    int    open(void);
  65.  
  66. ////////////////////// Malloc/Free //////////////////////////////////////
  67.    void free(void *);
  68.    void *malloc(void);
  69.  
  70.  
  71.  
  72.    void empty(void );
  73.    void zap(void );
  74.    U32    blocks(void) { return nrbl; }
  75.    void report(FILE *fp,int sub);
  76.  
  77.  
  78. };
  79.  
  80.  
  81. #endif
  82.